#include<iostream>
using namespace std;
//饿汉:在程序启动的时候就会创建出一个唯一的单例对象

template<class T>
class Singleton
{
public:
    static T& GetSingleton() //提供一个静态方法获取全局唯一的单例对象
    {
        return data;
    }
    
    // static T* GetSingleton()//提供一个静态方法获取全局唯一的单例对象的指针
    // {
    //     return &data;
    // }
private:
    Singleton() {}
    static T data;
};

//静态成员在类外初始化
template<class T>
T Singleton<T>::data  = T();

class MyClass
{
public:
    void func()
    {
        cout <<"MyClass::func()"<<endl;
    }
};
int main()
{
    //注意:此时T的类型为MyClass 
    Singleton<MyClass>::GetSingleton().func();
    //Singleton<MyClass>::GetSingleton()->func();
    return 0;
}
